package com.lynn.mmcc.tools;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import com.oooo3d.common.util.DateTimeUtil;

public class DateUtil {
    
    /**
     * 用来计算指定时间偏移之后的时间
     * @param startDate
     * @param timeUnit  1是日   2是月
     * @param timeNum  
     * @return
     */
    public static Date computeDate(Date startDate,int timeUnit, int timeNum )
    {
	if(timeUnit == 1)
	{
	    return getDay(startDate,timeNum);
	}
	if(timeUnit == 2)
	{
	    return getMonth(startDate,timeNum);
	}
	if(timeUnit == 3)
	{
	    return getYear(startDate,timeNum);
	}
	return startDate;
    }
    
        public static Calendar initCalendar(Date aDate){
        	Calendar calendar = null;
        	if(aDate==null){
        		calendar = Calendar.getInstance();
        	} else {
        		calendar = new GregorianCalendar();
        		calendar.setTime(aDate);
        	}
        	return calendar;
        }
    	/**
	 *  根据日历的规则，为给定的时间字段添加或减去指定的月数
	 * @param 时间字段 （默认为当前时间）
	 * @param 为字段添加的月数
	 * @return
	 */
	public static Date getMonth(Date aDate, int amount){
		Calendar calendar = initCalendar(aDate);
		calendar.add(Calendar.MONTH, amount);		
		return calendar.getTime();
	}

	/**
	 *  根据日历的规则，为给定的时间字段添加或减去指定的年数
	 * @param 时间字段 （默认为当前时间）
	 * @param 为字段添加的年数
	 * @return
	 */
	public static Date getYear(Date aDate, int amount){
		Calendar calendar = initCalendar(aDate);
		calendar.add(Calendar.YEAR, amount);		
		return calendar.getTime();
	}

	/**
	 *  根据日历的规则，为给定的时间字段添加或减去指定的天数
	 * @param 时间字段 （默认为当前时间）
	 * @param 为字段添加的天数
	 * @return
	 */	
	public static Date getDay(Date aDate, int amount){
		Calendar calendar = initCalendar(aDate);
		calendar.add(Calendar.DAY_OF_MONTH, amount);		
		return calendar.getTime();
	}
	public static String TOUTC(){
		  //1、取得本地时间：    
		 Calendar cal = GregorianCalendar.getInstance();     
		//2、取得时间偏移量：    
		 int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET);    
		 //3、取得夏令时差：    
		 int dstOffset = cal.get(java.util.Calendar.DST_OFFSET);     
		 //4、从本地时间里扣除这些差量，即可以取得UTC时间：    
		cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset)); 
	   String utctime =  DateTimeUtil.getDateTime(cal.getTime(), "yyyyMMddHHmmss");
		return utctime;
	}
	
	public static Date TOUTCDate(){
		  //1、取得本地时间：    
		 Calendar cal = GregorianCalendar.getInstance();     
		//2、取得时间偏移量：    
		 int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET);    
		 //3、取得夏令时差：    
		 int dstOffset = cal.get(java.util.Calendar.DST_OFFSET);     
		 //4、从本地时间里扣除这些差量，即可以取得UTC时间：    
		cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset)); 
	   //String utctime =  DateTimeUtil.getDateTime(cal.getTime(), "yyyyMMddHHmmss");
		return cal.getTime();
	}
	
	/**
	 * 取得系统当前时间
	 * @return 系统当前时间
	 */
	public static Date getSystemDateTime() {
		return new Date();
	}
}
